package sunmi.payment.L3;

import mi.payment.MyApplication;
import mi.payment.R;

/**
 * @author Lee64 on 2017/5/11.
 */

public enum L3ErrorCode {

    // 未知错误
    ERROR_UNKNOWN(400, R.string.error_unknown),

    // 交易失败
    ERROR_TRADE_FAILED(401, R.string.error_trade_failed),

    // 无效的支付类型
    ERROR_INVALID_PAYMENT_TYPE(402, R.string.error_invalid_payment_type),

    // 查询不到此笔交易
    ERROR_NOT_TRADE(403, R.string.error_not_transaction),

    // 超过最大交易金额
    ERROR_EXCEED_MAX_AMOUNT(404, R.string.error_exceed_max_amount),

    // 无效的原交易参考号
    ERROR_INVALID_ORIGINAL_REFERENCE_NO(405, R.string.error_invalid_original_reference_no),

    // 无效的原交易凭证号
    ERROR_INVALID_ORIGINAL_VOUCHER_NO(406, R.string.error_invalid_original_voucher_no),

    // 无效的交易类型
    ERROR_INVALID_TRADE_TYPE(407, R.string.error_invalid_transaction_type),

    // 查询不到末笔交易
    ERROR_NOT_FINAL_TRANSACTION(408, R.string.error_not_final_transaction),

    // 无效的金额
    ERROR_INVALID_AMOUNT(409, R.string.error_invalid_amount),

    // 卡号为空
    ERROR_CARD_NO_EMPTY(410, R.string.error_card_no_empty),

    // 交易预处理失败
    ERROR_PRE_TRANSACTION(411, R.string.error_pre_transaction),

    // 签到失败
    ERROR_SIGN_FAIL(412, R.string.error_sign_fail),

    // 交易超时
    ERROR_TRADE_TIMEOUT(413, R.string.error_transaction_timeout),

    // 初始化失败
    ERROR_INITIALIZED_FAIL(414, R.string.error_initialized_fail),

    // 签购单抬头设置失败
    ERROR_RISE_STRING_FAIL(415, R.string.error_rise_string_fail),

    // 无效的交易日期
    ERROR_INVALID_DATE(416, R.string.error_invalid_date),

    // 无效的交易订单号
    ERROR_INVALID_ORDER_ID(417, R.string.error_invalid_order_id),

    // 交易取消
    ERROR_TRADE_CANCEL(418, R.string.error_transaction_cancel),

    // 无交易数据
    ERROR_TRANSACTION_NO_DATA(419, R.string.error_transaction_no_data),

    // 流水未结算,请先完成结算
    ERROR_TRADE_NO_SETTLEMENT(420, R.string.error_transaction_no_settlement),

    // 签退失败
    ERROR_SIGN_OUT_FAIL(421, R.string.error_sign_out_failed),

    // TMK下载错误
    ERROR_TMK_DOWNLOAD_FAIL(422, R.string.error_tmk_download_fail),

    // 终端参数下载错误
    ERROR_MERCHANT_DOWNLOAD_FAIL(423, R.string.error_merchant_download_fail),

    // 参数校验错误
    ERROR_PARAMETER_CHECK_FAIL(424, R.string.error_parameter_check_fail),

    // 交易笔数上限
    ERROR_TRADE_NUM_LIMIT(425, R.string.error_trade_num_limit),

    // 交易开关关闭
    ERROR_TRADE_CLOSE(426, R.string.error_trade_close);

    private int code;
    private int resId;

    L3ErrorCode(int code, int resId) {
        this.code = code;
        this.resId = resId;
    }

    public int getCode() {
        return this.code;
    }

    public int getResId() {
        return this.resId;
    }

    public static L3ErrorCode getErrorCode(int code) {
        for (L3ErrorCode errorCode : values()) {
            if (errorCode.code == code) {
                return errorCode;
            }
        }
        return ERROR_UNKNOWN;
    }

    public static String getMessage(int code) {
        for (L3ErrorCode errorCode : values()) {
            if (errorCode.code == code) {
                return MyApplication.getInstance().getString(errorCode.resId);
            }
        }
        return "unknown [" + code + "]";
    }

    public static String getMessage(L3ErrorCode errorCode) {
        int code = errorCode.getCode();
        return getMessage(code);
    }


}
